<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>

        //这是我的理解，不知道这个算不算是闭包

        /*有点类似java的bean，outer是class，调用outer的时候，
        声明了局部变量localVal，相当于与javabean的private变量，并定义内部函数getLocalVal与setLocalVal，
        这里利用了js变量提升的特性，getLocalVal与setLocalVal并没有用var声明，但是对其赋值了，则相当于已经初始化，
        且其成为全局变量，这样可以在外部直接调用，同时又利用了内部函数可以访问上层函数的局部变量的特性，
        getLocalVal与setLocalVal就起到了类似于javabean中getter与setter的作用，全局可调用，作为访问outer的局部变量localVal的入口
         */
        function outer(){
            var localVal = 1;

            getLocalVal = function(){
                return localVal;
            }

            setLocalVal = function(val){
                localVal = val;
            }
        }

        //调用outer，类似于实例化一个对象
        outer();

        //调用set方法
        setLocalVal(3);

        //调用get方法拿到outer的私有变量
        var publicVal = getLocalVal();
        alert(publicVal);//结果为3


    </script>
</head>
<body>

</body>
</html>